Development Diary: Changing Name
Ik ben Mod Duncan, een van de leden van het Web Systems team bij Jagex. Veel van het werk dat wij doen in Web Systems vindt plaats achter de schermen, dus je zal er niet veel van merken (behalve wanneer dingen fout gaan), maar wij zijn verantwoordelijk voor het ontwikkelen en onderhouden van alle website systemen die onze spellen ondersteunen, je accounts beheren, website features aanbieden zoals de hiscores en forums, betalingen afhandelen voor membership en al het andere. De meeste tijd zijn de gevolgen van onze systemen gelimiteerd tot de website, maar het werk dat ik de laatste maanden heb gedaan zal veel meer zichtbaar zijn wanneer het uiteindelijk uitkomt. Het project waaraan ik werk sinds januari (volgens ‘version control logs’; het voelt een stuk langer aan) heet Display Names en, zoals enkele hints op de forums en Twitter toevoegingen je misschien al duidelijk gemaakt hebben, heeft als doel spelers hun namen te laten veranderen. Dus waarom, vraag je misschien, heeft het zo lang geduurd? Het komt vaak voor in de programmeerwereld dat hoe makkelijker iets is om te omschrijven, hoe moeilijker het is om het te implenteren, en dit project is geen uitzondering. Dus, ga lekker zitten, en ik zal je leiden door het lange en lastige proces van het implementeren van het simpelste klinkende idee: “laat spelers hun naam veranderen”. Het kan niet zo moeilijk zijn, toch? Nederig begin Het begin van het Display Names project gaat nog verder terug dan januari, voordat ik zelfs betrokken was. Toen heette het niet eens Display Names, en het doel een beetje anders – we wilden gewoon het gemakkelijker maken voor mensen die nieuwe accounts aanmaken om een username te vinden die nog niet gekozen is. Er zijn miljoenen accounts geregistreerd voor RuneScape en FunOrb, en duizenden worden elke dag daaraan toegevoegd, maar slechts een fractie van die accounts worden nog steeds gebruikt. Als we hiermee door zouden gaan en alle inactieve accounts zouden verwijderen, zouden we hun usernames vrij kunnen maken voor anderen om te kiezen. Een nobel doel, zeker, maar helaas (zoals het zo vaak het geval is) bestond het niet lang door technische details. Op dit punt in ons verhaal is een korte uitweiding in de architectuur van de Jagex back-end servers geplaatst, zodat je misschien de kwesties begrijpt die wij tegenkomen. De systemen die wij onderhouden zijn onderverdeeld in veel individuele applicaties (we noemen ze ‘modules’), elk gaat over een algemeen klein deel van de spellen en de accounts onderhouden. Bijvoorbeeld, er is een module die gaat over het maken van nieuwe accounts; er is er één voor polls; een ander voor het tonen van de hiscore tabellen. De grotere systemen, zoals het afhandelen van offences en appeals, zijn verspreid over meer dan één module. Elk van deze systemen slaat zijn eigen informatie op, en wanneer spelers betrokken zijn slaan we de informatie over hun usernames op. In het algemeen maakt dit ons leven een stuk gemakkelijker, omdat we de individuele modules kunnen updaten zonder de rest van de systemen te beïnvloeden. Echter, in dit geval maakt het ons leven een stuk moeilijker. Een gebruiker van elke module verwijderen waar ze misschien in staan is niet iets wat we meteen zouden kunnen doen, dus onze eerste horde was wat te doen als we hadden besloten dat iemand ‘inactief’ was en zij de driestheid hadden om te beginnen spelen halverwege het verwijderingsproces. Onwaarschijnlijk, zou je kunnen denken, maar met de miljoenen accounts die we hebben, worden deze soorten moeilijke gebeurtenissen meer en meer plausibel. Zelfs als we een oplossing voor die kwestie hadden gevonden, vonden we uit dat er informatie in de Billing systemen was die we verplicht waren te bewaren, wat het nog ingewikkelder maakte. Op het eind gaven we het idee op om accounts te verwijderen en overwogen we het alternatief – alleen hun namen verwijderen. Wat zit er in een naam? Op dit punt in het verhaal werd het project ‘Display Names’, en, kort daarna werd ik betrokken. Het nieuwe doel was om een tweede ‘naam’ aan elk account te geven, geheel gescheiden van hun username. Dan kunnen we doen wat we willen bij elke display naam op het account zonder onze data opslag of oude accounts te beïnvloeden. We zouden zelfs namen kunnen wegnemen van ongebruikte accounts om ze vrij te maken voor andere spelers, en het ergste dat zou kunnen gebeuren is dat die accounts een nieuwe name zouden moeten kiezen als ze terug wilden komen in het spel. We vonden zelfs een aantal extra voordelen van dit idee. Met de display naam gescheiden van de account naam, zijn we niet gebonden door bestaande beperkingen op naamlengte, of het aantal letters die het kan bevatten. Als we de mogelijkheid hebben om iemands naam weg te nemen zonder op een andere manier het account te beïnvloeden, dan zouden we iets kunnen doen aan kwetsende namen zonder meteen het account te bannen. Het zou zelfs accounts veiliger maken, omdat een potentiële hacker je username en ook je wachtwoord zou moeten achterhalen. Zoals je misschien al geraden hebt door de acht maanden die het heeft geduurd vanaf dit punt, was zelfs dit simpel lijkende doel niet zo gemakkelijk toen het werd uitgewerkt. Zulke dingen zijn dat nooit… Dat wat we te gemakkelijk verkrijgen, respecteren we te licht Zodra we het basis concept van het ontwerp op papier hadden, was de eerste stage het allemaal apart doorzoeken om fouten te vinden. Eerst was het geval van het maken van de display naam van ieder account voor alle modules die dat moesten weten, het spel zelf nog niet meegeteld. De meeste tijd konden we wegkomen met het gebruiken van login servers, die een hoop relevante informatie over ieders account vasthoudt die is gekregen wanneer een speler inlogt. Echter, dat helpt ons niet wanneer we je jouw Friends List (als je vrienden niet ingelogt zijn) laten zien, of op de website wanneer je kijkt naar de hiscore tabel of de forums. Omdat we willen dat spelers hun namen kunnen veranderen, konden we het niet gewoon overal opslaan, dus we moesten ieder systeem elke keer de naam op laten zoeken. Na wat haastig geschreven berekeningen, leek het erop dat in het ergste geval 40.000 van deze opzoekingen per seconde zouden plaatsvinden. Dat, zelden, is best veel. We wilden niet zoveel lading naar de login servers brengen, dus er most een apart systeem zijn om de opzoekingen zo snel mogelijk te behandelen. Nadat de technische problemen uit de weg waren, besloten we de veranderingen zo simpel en duidelijk mogelijk voor de gebruikers te maken. Voorkomen dat de Friends List zou breken was mogelijk het grootste probleem. Als jouw vriend zijn naam verandert, wilden we niet dat deze jouw vriend niet meer was, dus de lijst moest accounts opslaan in plaats van display namen. Dat zou ons nog steeds achterlaten met spelers die op hun hoofd krabben en die zich verwonderen wie deze mensen met vreemde namen op hun lijst zijn, dus we voegden een kenmerk aan de interface toe die elke vorige naam van je vrienden toont wanneer zij die veranderd hebben. Als laatst dachten we aan de manieren waarop spelers misschien op andermans tenen zouden staan met hun display namen, dus we besloten om spelers hun vorige naam ‘vast te houden’ voor een tijd nadat ze die veranderd hadden, zodat als ze besloten dat ze de nieuwe naam niet zo leuk vonden, ze nog steeds terug zouden kunnen gaan naar hun vorige naam, zonder dat iemand stiekem deze stiekem al had ingenomen. We maakten ook zeker dat het niet gemakkelijk zou zijn om zich voor te doen als een andere speler, dus gelijkende namen zouden niet toegestaan zijn. Negen delen transpiratie Met alle opwinding van schrijven, opnieuw schrijven en debatteren over ontwerp documenten eindelijk achter me, was het tijd om daadwerkelijk te werken aan de module zelf. Als een toegevoegde bonus was er ook het werk van display namen integreren in onze andere Web Systems modules en werken met de Game Engine, FunOrb en RuneScape Content teams om hen hetzelfde te laten doen. Naast het werk dat ik heb gedaan hebben zij allemaal hard gewerkt aan het maken, testen en bijstellen van hun eigen veranderingen. Player Support heeft gewerkt om te verzekeren dat we niet spelers benadelen met onze veranderingen, en ze hebben veel suggesties gemaakt om het project zo positief mogelijk te maken. Zij hebben ook het gereedschap onderzocht dat zij moeten gebruiken om alle nieuwe functies die beschikbaar voor hen waren te gebruiken. Deze codes hebben mijn dagen beziggehouden voor de laatste maanden, maar er lijkt eindelijk een eind aan te komen. De algmene display naam module is op dit moment bij de zachte genade van het Web Systems QA team, die alle problemen eruit halen en het zo betrouwbaar en gemakkelijk mogelijk maken om te gebruiken. Het Web Content team heeft de openbare interface gemaakt, en de RuneScape Content en FunOrb teams hebben display namen overal ingebouwd (het RuneScape Content team was zo aardig om hun lijst met alle regels van RuneScape’s code te delen die verwees naar de spelers naam – bijna 2000 verschillende plaatsen). De laatste ronde Er is nog steeds veel te testen en werk te doen voordat all ons werk iets oplevert en spelers hun namen kunnen veranderen. We moeten testen of het nieuwe systeem de lading aanvragen aankan, en de lancering van veranderingen in alle teams en departementen coördineren is al een enorme taak op zich. Zelfs nadat het systeem is uitgebracht is er nog veel werk te doen – niet alleen moet ik een waakzaam oog op het systeem houden en alle problemen verhelpen, maar er zijn ook nog vele nieuwe kenmerken die we in de toekomst zouden willen toevoegen. Aangezien ik de natuurlijke neiging van alle ontwerpers overal bezit om deadlines te ontlopen, zal ik jullie geen beloofde release datum geven (ik zou alleen mezelf met catastrofale interrupties kwellen als ik dat zou doen), maar het project komt aan een eind en ik kijk veel vooruit naar de dag waarop we dit in de gretige handen van onze spelers kunnen geven. Categorie:Development Diary Categorie:Updates